<?php
namespace app\util;
use think\Cache;
class IAuth {

    /**
     * 生成每次请求的sign
     * @param array $data
     * @return string
     */
    public static function setSign($data = []) {
        $string = 'appData=' . $data['appData'] . '&time=' . $data['time'] . "&version=" . $data['version'];
        // 通过md5来加密
        $string = md5($string . config('app.AES_KEY'));
        return $string;
    }

    /**
     * 检查sign是否正常
     * @param array $data
     * @param $data
     * @return boolean
     */
    public static function checkSignPass($data) {

        $sign = $data['sign'];
        unset($data['sign']);
        $check_sign = self::setSign($data);
        if ($sign !== $check_sign) {
            return false;
        }

        if(config('app_debug') == false) {
            if ((time() - ceil($data['time'] / 1000)) > config('app.APP_SIGN_TIME')) {
                return false;
            }

//            if (Cache::get($sign)) {
//                return false;
//            }
        }

        return true;
    }

    /**
     * 设置登录的token  - 唯一性的
     * @param string $phone
     * @return string
     */
    public static function setAppLoginToken($phone = '') {
        $str = md5(uniqid(md5(microtime(true)), true));
        $str = sha1($str.$phone);
        return $str;
    }

    /**
     * 生成每次请求的sign
     * @param array $data
     * @return string
     */
    public static function setMasterSign($data = []) {
        $string = 'appData=' . $data['appData'] . '&time=' . $data['time'];
        // 通过md5来加密
        $string = md5($string . config('app.MASTER_KEY'));
        return $string;
    }

    /**
     * 检查sign是否正常
     * @param array $data
     * @param $data
     * @return boolean
     */
    public static function checkMasterSignPass($data) {
        $sign = $data['sign'];
        unset($data['sign']);
        $check_sign = self::setMasterSign($data);
        if ($sign !== $check_sign) {
            return false;
        }

        if(config('app_debug') == false) {
            if ((time() - ceil($data['time'] / 1000)) > config('app.APP_SIGN_TIME')) {
                return false;
            }

            if (Cache::get($sign)) {
                return false;
            }
        }

        return true;
    }

}